package icu.funkye.confine.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import icu.funkye.confine.wrapper.ResourceWrapper.LimitMode;

/**
 * @author jianbin.chen
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ConfineLimiter {

    /**
     * 默认全限定名+method+入参
     */
    String method() default "";

    /**
     * 遇到限流后等待时长
     */
    int waitTime() default 0;

    /**
     * 默认丢弃请求
     */
    LimitMode limitType() default LimitMode.DROP;

    /**
     * 默认限流阈值50tps
     */
    int tps() default 50;

    /**
     * 触发限流/熔断后进行回调此接口
     * 接口需跟使用注解的函数名及参数名一致(可了解spring cloud的failBack设置)
     */
    Class failBack() default DefaultFailBack.class;

    /**
     * 限流rt(单位毫秒),此函数1分钟平均rt达到此阈值后进行限流
     * 优先级大于tps
     */
    long rt() default 0;

}
